草庐IT

python subprocess.Popen挂起

全部标签

Python:在 subprocess.Popen(..) 中导出环境变量

我在调用subprocess.Popen时设置环境变量时遇到问题。环境变量似乎没有被设置。有关如何为Python命令行调用正确设置环境变量的任何建议?我的目标是运行一个使用由我的Python代码确定的环境变量的脚本:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)subprocess.Popen('/usr/bin/mybinary',env=d).wait()但脚本的react就像从未设置过变量一样这是我尝试使用Python的交互式解释器进行的测试:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)

Python Subprocess.Popen 从一个线程

我正在尝试使用子进程模块和Popen在线程内启动“rsync”。在我调用rsync之后,我还需要读取输出。我正在使用通信方法来读取输出。当我不使用线程时,代码运行良好。看来,当我使用线程时,它会卡在通信调用上。我注意到的另一件事是,当我设置shell=False时,我在线程中运行时不会从通信中得到任何返回。 最佳答案 您没有提供任何代码供我们查看,但这里有一个与您描述的类似的示例:importthreadingimportsubprocessclassMyClass(threading.Thread):def__init__(sel

python - 检查挂起的 Django 迁移

在Django中,是否有一种简单的方法可以检查所有数据库迁移是否已运行?我找到了manage.pymigrate--list,它提供了我想要的信息,但格式不是机器可读的。对于上下文:我有一个脚本在迁移数据库之前不应开始运行。由于各种原因,从运行迁移的进程发送信号会很棘手。所以我想让我的脚本定期检查数据库以查看是否所有迁移都已运行。 最佳答案 壳牌到目前为止我发现的唯一简单的解决方案是运行./manage.pyshowmigrations|grep'\[\]'如果所有迁移都已应用,它将输出一个空字符串。但是,它与输出格式密切相关。Py

python - 使用 Popen 打开进程并获取 PID

我正在开发一个漂亮的小功能:defstartProcess(name,path):"""StartsaprocessinthebackgroundandwritesaPIDfilereturnsinteger:pid"""#Checkiftheprocessisalreadyrunningstatus,pid=processStatus(name)ifstatus==RUNNING:raiseAlreadyStartedError(pid)#Startprocessprocess=subprocess.Popen(path+'>/dev/null2>/dev/null&',shell=

Python 子进程 Popen.communicate() 等价于 Popen.stdout.read()?

非常具体的问题(我希望):以下三个代码有什么区别?(我希望它只是第一个不等待子进程完成,而第二个和第三个会这样做。但我需要确定这是only的区别...)我也欢迎其他评论/建议(尽管我已经很清楚shell=True的危险和跨平台限制)请注意,我已经阅读了Pythonsubprocessinteraction,whydoesmyprocessworkwithPopen.communicate,butnotPopen.stdout.read()?并且我不想/不需要之后与程序交互。另外请注意,我已经阅读了AlternativestoPythonPopen.communicate()memory

python - 使用 subprocess.Popen 处理大输出

我有一些Python代码可以执行外部应用程序,当应用程序的输出量很小时,它可以正常工作,但在输出量很大时会挂起。我的代码如下:p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)errcode=p.wait()retval=p.stdout.read()errmess=p.stderr.read()iferrcode:log.error('cmdfailed:%s'%(errcode,errmess))文档中的注释似乎表明存在潜在问题。等待中,有:Warning:Thiswill

python - 在 Windows 上的 CygWin 下调用 python 挂起

安装新的Windows系统,我已经安装了CygWin和64在默认位置(c:\cygwin和c:\Python27\python),并添加了CygWinbin和Python目录到我的路径(在用户变量PATH中)。从在正常的命令窗口中,Python可以完美启动,但是当我从CygWin环境中的bash调用它,它挂起,从不给我输入提示。我以前在其他机器上做过这个,但总是用旧版本的Python(32位)和CygWin,以及Python在一个绝对非标准的位置。有没有其他人有这个问题,或者有人可以告诉我这可能是什么原因吗? 最佳答案 试试这个py

Python多处理池在加入时挂起?

我正在尝试在多个文件上并行运行一些python代码。构造基本上是:defprocess_file(filename,foo,bar,baz=biz):#dostuffthatmayfailandcauseexceptionif__name__=='__main__':#setupcodesettingparametersfoo,bar,andbizpsize=multiprocessing.cpu_count()*2pool=multiprocessing.Pool(processes=psize)map(lambdax:pool.apply_async(process_file,(x

python - 如何使用 Popen 同时写入标准输出和记录文件?

我正在使用Popen调用一个不断将其标准输出和标准错误写入日志文件的shell脚本。有没有办法同时连续输出日志文件(到屏幕上),或者让shell脚本同时写入日志文件和stdout?我基本上想在Python中做这样的事情:catfile2>&1|tee-alogfile#"catfile"willbereplacedwithsomescript同样,这将stderr/stdout一起传送到tee,tee将其同时写入stdout和我的日志文件。我知道如何在Python中将stdout和stderr写入日志文件。我被困的地方是如何将这些复制回屏幕:subprocess.Popen("catf

Python:ulimit 和不错的 subprocess.call/subprocess.Popen?

我需要限制使用subprocess.call从python进程生成的外部命令行应用程序占用的时间和CPU,主要是因为有时生成的进程会卡住并将CPU固定在99%。nice和ulimit似乎是执行此操作的合理方法,但我不确定它们如何与子进程交互。限制类似于:如果进程耗时超过60秒,则终止进程将其限制为CPU的20%我想将资源限制应用于子进程,而不是生成子进程的python进程。有没有办法将nice和ulimit应用于subprocess.call生成的进程?有更好的Python原生替代品吗?这是在linux(ubuntu)系统上。 最佳答案